package cn.wzut.edut.service;

import cn.wzut.edut.dao.inf.ClassCollege;
import cn.wzut.edut.dao.inf.Group;
import cn.wzut.edut.dao.inf.Information;
import cn.wzut.edut.dao.pojo.inf.StuInf;
import cn.wzut.edut.dao.pojo.inf.TcInf;
import cn.wzut.edut.dao.pojo.table.*;
import cn.wzut.edut.jwt.JWTUtils;
import cn.wzut.edut.pojo.StuGroupInfo;
import cn.wzut.edut.pojo.StuGroupModInfo;
import cn.wzut.edut.pojo.TeacherGroupInfo;
import cn.wzut.edut.pojo.TeacherGroupModInfo;
import com.auth0.jwt.interfaces.DecodedJWT;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.LinkedList;
import java.util.List;

/**
 * 教师组服务层（未完成）
 */
@Service
public class TeacherGroupService {
    @Autowired
    Information information;

    @Autowired
    ClassCollege classCollege;

    @Autowired
    ClientService clientService;

    @Autowired
    Group group;

    /**
     * 获取全部教师组列表
     *
     * @param token
     * @return
     */
    public List<PtyTeacherGroup> getAllTeacherGroupList(String token){
        // 解析token
        DecodedJWT decode = JWTUtils.decode(token);
        // 判断是否是后台管理端发送的请求
        if(decode.getClaim("end").asString().equals("B")){
            // 获取教师组列表
            return group.selectAllTeacherGroup();
        }
        return null;
    }

    /**
     * 获取指定个数指定页的教师组列表
     *
     * @param token
     * @return
     */
    public List<PtyTeacherGroup> getAllTeacherGroupListByPage(String token, int page, int num){
        // 解析token
        DecodedJWT decode = JWTUtils.decode(token);
        // 判断是否是后台管理端发送的请求
        if(decode.getClaim("end").asString().equals("B")){
            // 获取教师组列表
        }
        return null;
    }

    /**
     * 获取指定个数指定页的加入的教师组列表
     *
     * @param token
     * @return
     */
    public List<PtyTeacherGroup> getJoinedTeacherGroupListByPage(String token, int page, int num){
        return null;
    }



    /**
     * 添加教师组
     * @param token
     * @return
     */
    public boolean addGroup(String token, TeacherGroupInfo teacherGroupInfo){
        try {
            // 解析token
            DecodedJWT decode = JWTUtils.decode(token);
            // 判断是否是后台管理端发送的请求
            if (decode.getClaim("end").asString().equals("B")) {
                // 获取用户id
                String userId = decode.getClaim("userid").asString();
                // 判断用户是否拥有菜单7（教师组管理）权限
                if (clientService.selectRole(userId, "7")) {
                    // 学生组信息写入学生组表
                    String id = group.insertPtyTeacherGroup(new PtyTeacherGroup("1", teacherGroupInfo.getGroupName()));
                    // 更新学生学生组表
                    if (teacherGroupInfo.getTeachers() != null) {
                        for(PtyTeacher ptyTeacher : teacherGroupInfo.getTeachers()){
                            group.insertPtyTeacherGroupRel(new PtyTeacherGroupRel("1", ptyTeacher.getId(), id));
                        }
                    }
                }
            }
        }
        catch(Exception e){}
        return false;
    }

    /**
     * 教师用户加入指定教师组
     * @param token
     * @return
     */
    public boolean joinGroup(String token, String groupId){
        try {
            // 解析token
            DecodedJWT decode = JWTUtils.decode(token);
            // 判断是否是后台管理端发送的请求
            if (decode.getClaim("end").asString().equals("B")) {
                // 获取用户id
                String userId = decode.getClaim("userid").asString();
                // 写入教师组关系表
                group.insertPtyTeacherGroupRel(new PtyTeacherGroupRel("1", groupId, userId));
            }
        }
        catch(Exception e){}
        return false;
    }

    /**
     * 删除教师组
     * @param token
     * @return
     */
    public boolean delGroup(String token, String[] groupids) {
        // 解析token
        DecodedJWT decode = JWTUtils.decode(token);
        // 判断是否是后台管理端发送的请求
        if (decode.getClaim("end").asString().equals("B")) {
            // 获取用户id
            String userId = decode.getClaim("userid").asString();
            // 判断用户是否拥有菜单7（教师组管理）权限
            if (clientService.selectRole(userId, "7")) {
                for(String groupid : groupids){
                    if(!group.delPtyTeacherGroupInId(groupid)){
                        return false;
                    }
                }
                return true;
            }
        }
        return false;
    }

    /**
     * 修改教师组
     * @param token
     * @return
     */
    public boolean modGroup(String token, TeacherGroupModInfo teacherGroupModInfo) {
        // 解析token
        DecodedJWT decode = JWTUtils.decode(token);
        // 判断是否是后台管理端发送的请求
        if (decode.getClaim("end").asString().equals("B")) {
            // 获取用户id
            String userId = decode.getClaim("userid").asString();
            // 判断用户是否拥有菜单7（教师组管理）权限
            if (clientService.selectRole(userId, "7")) {
                // 更新教师组表信息
                group.updatePtyTeacherGroup(new PtyTeacherGroup(teacherGroupModInfo.getGroupId(), teacherGroupModInfo.getGroupName()));
                // 更新添加教师信息
                if(teacherGroupModInfo.getAddIds() != null) {
                    for (String addId : teacherGroupModInfo.getAddIds()) {
                        group.insertPtyTeacherGroupRel(new PtyTeacherGroupRel("1", teacherGroupModInfo.getGroupId(), addId));
                    }
                }
                // 更新删除教师信息
                if(teacherGroupModInfo.getDelIds() != null) {
                    for (String delId : teacherGroupModInfo.getDelIds()) {
                        group.delPtyTeacherGroupRel(teacherGroupModInfo.getGroupId(), delId);
                    }
                }
                return true;
            }
        }
        return false;
    }

    /**
     * 根据教师组id查询教师组信息
     * @param token
     * @return
     */
    public TeacherGroupInfo getGroupById(String token, String groupid) {
        // 解析token
        DecodedJWT decode = JWTUtils.decode(token);
        // 判断是否是后台管理端发送的请求
        if (decode.getClaim("end").asString().equals("B")) {
            // 获取用户id
            String userId = decode.getClaim("userid").asString();
            // 判断用户是否拥有菜单7（教师组管理）权限
            if (clientService.selectRole(userId, "7")) {
                // 获取教师教师组关系表记录，根据记录数组中的教师id获取教师信息
                List<PtyTeacher> list = new LinkedList<>();
                for (PtyTeacherGroupRel rel : group.selectTeacherGroupRelInGroup(groupid)) {
                    list.add(information.selectTeacherInId(rel.getTeacherId()));
                }
                // 返回教师组表数据和该教师组下教师数据
                return new TeacherGroupInfo(group.selectTeacherGroup(groupid).getTeacherGroupName(), list);
            }
        }
        return null;
    }
}
